/*
 * @Descripttion: 
 * @version: 
 * @Author: ada.wu
 * @Date: 2024-01-05 10:17:42
 * @LastEditors: ada.wu
 * @LastEditTime: 2024-03-08 11:33:59
 */
import {computed, reactive, ref, Ref, toRefs} from "vue";
import moment from "moment";


/**
 * 年检校验
 * 小型、微型非营运载客汽车6年以内每2年检验1次；超过6年没满10年的，每2年检验1次；超过（包含）10年的 每年检一次，超过（包含）15年的，每6个月检验1次；每次年审只能提前3个月
 *
 *  初次办理 2018年8月14日
 *  下次办理 2020年6月1日 - 2020年9月30日
 *
 *   2018年8月15日
 *   2019年10月15日
 *
 *   年检方法仅在有效期有意义
 *
 * @param enrolldate 初登时间
 * @param notOnlineFun 免上线执行的方法
 * @param onlineFun 上线执行的方法
 * @param otherFun 其他时间 回调下次年检 时间范围
 * @param vehicleDateFun 总是回调年检时间
 * @return {} boolean 是否在可年检范围
 */
const vehicleHandle = (enrolldate: string | Date, notOnlineFun: any, onlineFun: any, otherFun: any, vehicleDateFun: any) => {
    //当前时间
    let $now = moment()
    //初等月初 月末
    let $enrollStartDate = moment(
        moment(enrolldate).format('YYYY-MM-') + '01')
    let $enrollEndDate = $enrollStartDate.clone().add(1, 'month').subtract(1, 'day')

    //间隔月 年检月末到当前的月份
    const diffMonth = Math.ceil($now.diff($enrollEndDate, 'month'))
    //间隔年
    const diffYear = Math.floor(diffMonth / 12)
    if (diffYear < 6) {
        // 0 1   2 3   4 5 ->  2 4 6
        let year = diffYear + (diffYear % 2 ? 1 : 2)
        $enrollStartDate.add(year, 'year')
        //6年内最后3个月算上线  diffMonth 是月份差距 不满一个月会为0 需要+1
        //最后3个月
        if ([70, 71, 72].includes(diffMonth + 1)) {
            onlineFun && onlineFun()
        } else {
            notOnlineFun && notOnlineFun()
        }
    }
    //小于10年的时候每两年一次年检
    else if (diffYear < 9) {
        let year = diffYear + (diffYear % 2 ? 1 : 2)
        $enrollStartDate.add(year, 'year')
        onlineFun && onlineFun()
    } else if (diffYear < 14) {
        $enrollStartDate.add(diffYear + 1, 'year')
        onlineFun && onlineFun()
    } else {
        let month = diffMonth % 12 < 6 ? 6 : 12
        $enrollStartDate.add(diffYear, 'year').add(month, 'month')
        onlineFun && onlineFun()
    }
    let $nextBeforeDate = $enrollStartDate.clone().subtract(2, 'month')
    let $nextEndDate = $enrollStartDate.clone().add(1, 'month').subtract(1, 'day')

    console.log(enrolldate, '的最近一次年检时间应该为', $nextBeforeDate.format('YYYY-MM-DD'),
        $nextEndDate.format('YYYY-MM-DD'))
    vehicleDateFun && vehicleDateFun($nextBeforeDate, $nextEndDate)

    const isVehicle = $now.isAfter($nextBeforeDate) && $now.isBefore($nextEndDate)
    const vehicleNextBeforeDate = $nextBeforeDate
    const vehicleNextEndDate = $nextEndDate
    const nextVehicleCountDown = $nextBeforeDate.diff(moment(), 'day')
    const vehicleCountDown = $nextEndDate.diff(moment(), 'day')
    return {vehicleNextBeforeDate, vehicleNextEndDate, nextVehicleCountDown, vehicleCountDown, isVehicle}
}


export default function (userCar: Ref<any>) {
    const vehicle = computed(() => {
        const enrollDate = userCar.value.enrollDate
        if (!enrollDate) {
            return {
                isVehicle: false,
                vehicleNextBeforeDate: null,
                vehicleNextEndDate: null,
                nextVehicleCountDown: null,
                vehicleCountDown: null
            }
        }
        return vehicleHandle(enrollDate, null, null, null, null)
    })

    return {
        vehicle
    }
}
